% !Mode:: "TeX:UTF-8"
\chapter{Грамматика языка описания вариантов исполнения инструкций}\label{sec:syntax}

{\tt

ОписаниеВариантаИнструкции = ЗаголовокОписания ТелоОписания

ЗаголовокОписания = \{ ОбъявлениеАргумента \}

ОбъявлениеАргумента = ИмяАргумента ':' БитоваяДлина ';'

ТелоОписания = \{ Оператор \}

Оператор = Операторlet | Операторassume | Операторhit | \\Операторmiss

Операторassume = 'assume' ':' ЛогическиеВыражение ';'

ЛогическоеВыражение = 'true' | 'false' | ЛогическоеВыражение\\ ( 'and' | 'or' ) ЛогическоеВыражение | Сравнение

Сравнение = БитовоеВыражение ( '=' | '!=' | '>' | '<' | \\ '>='  | '<=') БитовоеВыражение

БитовоеВыражение = Константа | ID | БитовоеВыражение '[' Индекс\\ ']' | БитовоеВыражение '[' Диапазон ']' | БитовоеВыражение '||' \\ БитовоеВыражение | '(' БитоваяДлина ')' БитовоеВыражение \\ | БитовоеВыражение '\^{ }' Nat | АрифметическоеВыражение

АрифметическоеВыражение = БитовоеВыражение ('+' | '-' \\ | '*+' | '*-') БитовоеВыражение

Операторlet = ОператорЯвныйlet | ОператорНеявныйlet

ОператорЯвныйlet = ID '<-' БитовоеВыражение ';'

ОператорНеявныйlet = 'let' ID ':' БитоваяДлина ';'

Операторhit = 'hit' '<' ИмяТаблицы '>' '(' Ключ [',' Регион] ')'\\ '\{'[НайденнаяСтрока] [ИзменяющаяСтрока] '\}' ';'

Ключ = БитовоеВыражение

Регион = БитовоеВыражение

НайденнаяСтрока = 'loaded' '('  Аргумент \{ ',' Аргумент \} ')'

ИзменяющаяСтрока = 'storing' '('  Аргумент \{ ',' Аргумент \} ')'

Операторmiss = MissСВытеснением | MissБезВытеснения

MissБезВытеснения = 'miss' '<' ИмяТаблицы '>' '(' Ключ  [ ','\\ Регион ] ')' ';'

MissСВытеснением = 'miss' '<' ИмяТаблицы '>' '(' Ключ [ ',' \\ Регион ] ')' '\{' ВытесняющаяСтрока '\}' ';'

ВытесняющаяСтрока = 'replacing' '('  Аргумент \{ ',' Аргумент \} ')'

Аргумент = ИмяПоля '=' БитовоеВыражение

ИмяАргумента = ID

БитоваяДлина = Nat

Константа = Nat

ИмяТаблицы = ID

ИмяПоля = Nat

Индекс = Nat

Диапазон = Индекс '..' Индекс
} 